import os
import string
import sys

import pymysql
from dbutils.pooled_db import PooledDB
import yaml


def read_yaml():
    with open("config/config.yml", 'r') as file:
        data = yaml.safe_load(file)
    return data


def setConnConfig():
    data_info = read_yaml()
    if data_info is not None:
        DB_CONFIG = {
            'charset': 'utf8mb4',
            'cursorclass': pymysql.cursors.DictCursor,
            'maxconnections': 10,  # 连接池允许的最大连接数，0和None表示不限制连接数
            'mincached': 2,  # 初始化时，连接池中至少创建的空闲的连接，0表示不创建
            'maxcached': 5,  # 连接池中最多闲置的连接，0和None不闲置连接
            'maxshared': 3,  # 连接池中最多共享的连接数量，0和None表示全部连接都是专用的
            'blocking': True,  # 连接池中如果没有可用连接后，是否阻塞等待。True，等待；False，不等待然后报错
            'maxusage': None,  # 一个连接最多被重复使用的次数，None表示无限制
            'setsession': [],  # 开始会话前执行的命令列表。如：["set datestyle to ...", "set time zone ..."]
            'ping': 0,
            # ping MySQL服务端，检查是否服务可用。# 如：0 = None = never, 1 = default = whenever it is requested,
            # 2 = when a cursor is created, 4 = when a query is executed, 7 = always
        }
        DB_CONFIG.setdefault('host', data_info['host'])
        DB_CONFIG.setdefault('user', data_info['user'])
        DB_CONFIG.setdefault('port', data_info['port'])
        DB_CONFIG.setdefault('database', data_info['database'])
        DB_CONFIG.setdefault('password', data_info['password'])
        db_poolTemp = PooledDB(
            creator=pymysql,  # 使用链接数据库的模块
            **DB_CONFIG  # 其他配置
        )

    return db_poolTemp


# 获取连接
def get_conn():
    db_pool = setConnConfig()
    return db_pool.connection()

# 你可以将这个函数(get_conn)添加到你的ORM或DAO层中，以便在需要时获取数据库连接
